package com.aims.api.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 账户 DTO
 *
 * @author Generator
 * @since 2025-10-22
 */
@Data
public class AccountDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 账户ID
     */
    private Long id;

    /**
     * 账户编号
     */
    @NotBlank(message = "账户编号不能为空")
    @Size(max = 50, message = "账户编号长度不能超过50")
    private String accountNo;

    /**
     * 账户名称
     */
    @NotBlank(message = "账户名称不能为空")
    @Size(max = 100, message = "账户名称长度不能超过100")
    private String accountName;

    /**
     * 账户类型：1-普通账户，2-VIP账户，3-企业账户
     */
    @NotNull(message = "账户类型不能为空")
    @Min(value = 1, message = "账户类型必须在1-3之间")
    @Max(value = 3, message = "账户类型必须在1-3之间")
    private Integer accountType;

    /**
     * 账户余额
     */
    @NotNull(message = "账户余额不能为空")
    @DecimalMin(value = "0.00", message = "账户余额不能为负数")
    private BigDecimal balance;

    /**
     * 冻结金额
     */
    @DecimalMin(value = "0.00", message = "冻结金额不能为负数")
    private BigDecimal frozenAmount;

    /**
     * 状态：0-禁用，1-启用，2-冻结
     */
    @NotNull(message = "账户状态不能为空")
    @Min(value = 0, message = "账户状态必须在0-2之间")
    @Max(value = 2, message = "账户状态必须在0-2之间")
    private Integer status;

    /**
     * 所有者ID
     */
    private Long ownerId;

    /**
     * 所有者类型：1-个人，2-企业
     */
    private Integer ownerType;

    /**
     * 币种
     */
    @NotBlank(message = "币种不能为空")
    @Size(max = 10, message = "币种长度不能超过10")
    private String currency;

    /**
     * 开户日期
     */
    @NotNull(message = "开户日期不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate openDate;

    /**
     * 版本号（乐观锁）
     */
    private Integer version;

    /**
     * 备注
     */
    @Size(max = 500, message = "备注长度不能超过500")
    private String remark;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 更新人
     */
    private String updateBy;
}